改变this指向的三个方法

改变this指向的三个方法

函数方法 有3个 1 call 2 apply 3bind(ES5新增)


        
        //call apply bind 都可以改变this指向
        //其中 call和apply改变时是在函数执行的时候改变 bind改变时是在函数定义的时候改变
        //定义一个函数实现两个数相加
        function demo(a, b) {
            console.log(this);
            return a + b;
        }
        //改变this指向  第一个参数是你指定的this
        var result = demo.call({
            name: 1
        }, 1, 2);
        console.log(result);
		//返回值是上面函数定义的返回值   且使用call的同时 call执行函数
        //call方法有两个作用 1改变this指向(第一个参数)  2传递原函数所需的参数(剩余参数) 以逗号的格式分隔

        //2.apply
        //改变this指向 第一个参数是你指定的this  第二个参数是数组 数组里面是传递的参数
        var result1 = demo.apply({
            name: 2
        }, [2, 3]);
        console.log(result1);
		//使用apply方法的同时会执行函数
        //apply方法有两个作用 1.改变this指向(第一个参数) 2.传递原函数所需的参数 (第二个参数,数组)

        //3.bind
        //调用的时候不执行原函数
        var demo1 = demo.bind({
            name: 3
        }, 5, 9)
        demo(); //调用demo时发现this并没有改变  说明bind没有改变原函数中的this
        //因为bind是返回了一个新的函数
        demo1();
        var result2 = demo1(2, 3);
        console.log(result2);

        //总结 bind有两个作用:1返回一个新的函数 改变这个新函数中的this 2预传参数
		//预传参数之后 就算调用的时候有传递新的参数  也会以之前预传的参数为准

        //求一个数组中的最大值
        var arr = [1, 44, -9, 5, 26, 233, 54, 99];
        //Math.max(1,44,5,-9,56,233,53,99)
        let max = Math.max.apply("", arr)
        console.log(max);

        //求一个数组中的最小值
        let min = Math.min.apply("", arr)
        console.log(min);

总结:1、call方法在调用的时候会执行函数 第一个参数是this的指向 第二个参数以及后面的参数都是需要传的参数 返回值是原函数中定义的返回值
2、apply方法在调用的时候也会执行函数 第一个参数是this的指向 第二个参数是数组 其中是需要传递的参数 返回值是原函数中定义的返回值
3、bind方法在调用的时候不会执行函数 第一个参数是this的指向 第二个参数以及后面的参数都是需要传的参数 返回值是一个新的函数

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值